package day230512;

import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/5/13 17:38
 * 五子棋
 */
public class Main01 {

    public static final int N = 20;

    public static final int[][][] direction = {
            {{0, -1}, {0, 1}}, // 横向, 左, 右
            {{-1, 0}, {1, 0}}, // 纵向, 上, 下
            {{-1, -1}, {1, 1}}, // 主对角线
            {{-1, 1}, {1, -1}} // 副对角线
    }; // 分为四个大方向, 每个方向分为两个部分

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            // 录入棋盘
            String[] checkerboard = new String[N];
            for (int i = 0; i < N; i++) {
                checkerboard[i] = scan.next();
            }
            // 是否存在五子连珠
            System.out.println(fiveTogether(checkerboard) ? "Yes" : "No");
        }
        scan.close();
    }

    // 判断是否五子连珠
    private static boolean fiveTogether(String[] checkerboard) {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (checkerboard[i].charAt(j) == '*' || checkerboard[i].charAt(j) == '+') {
                    // 如果是棋子, 则统计该棋子周围是否存在五子连珠
                    if (getMaxCount(checkerboard, i, j, checkerboard[i].charAt(j)) >= 5) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    // 获取周围棋子连珠的最大个数
    private static int getMaxCount(String[] checkerboard, int x, int y, char color) {
        int count = 0;
        // 遍历四个方向, 统计最大个数
        for (int i = 0; i < 4; i++) {
            int curCount = 0; // 存储当前个数
            // 每个方向分为两个部分
            for (int j = 0; j < 2; j++) {
                int curX = x;
                int curY = y;
                while (curX >= 0 && curX < N && curY >= 0 && curY < N && checkerboard[curX].charAt(curY) == color) {
                    curX += direction[i][j][0];
                    curY += direction[i][j][1];
                    curCount++;
                }
            }
            count = Math.max(count, curCount - 1);
        }
        return count;
    }
}
